/*
  * This file is part of WhereYouGo.
  *
  * WhereYouGo is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation, either version 3 of the License, or
  * (at your option) any later version.
  *
  * WhereYouGo is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
  * along with WhereYouGo.  If not, see <http://www.gnu.org/licenses/>.
  *
  * Copyright (C) 2012 Menion <whereyougo@asamm.cz>
  */ 

package menion.android.whereyougo.gui.extension;

import locus.api.objects.extra.Location;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;

/**
 * @author menion
 * @since 25.1.2010 2010
 */
public class DataInfo implements Comparable<DataInfo> {

	private static final String TAG = "DataInfo";
	
	private int id;
	private String name;
	private String description;
	private int image;
	private Drawable imageD;
	private Bitmap imageB;
	private Bitmap imageRight;
	
	public double value01;
	public double value02;
	
	public double distance = -1; 
	public double azimuth = -1;
	
	/* USAGE:
	 * - DbWaypoints to store GeocachingSimpleData object in DataInfo list
	 */
	public Object addData01;
	public Object addData02;
	
	public boolean enabled = true;
	
	public DataInfo(String name) {
		this(-1, name, "", -1);
	}
	
	public DataInfo(String name, String description) {
		this(-1, name, description, -1);
	}
	
	public DataInfo(int id, String name, Bitmap image) {
		this(id, name, "", image);
	}
	
	public DataInfo(int id, String name, String desc) {
		this(id, name, desc, -1);
	}
	
	public DataInfo(String name, String description, int image) {
		this(-1, name, description, image);
	}
	
	public DataInfo(String name, String description, Drawable image) {
		this(-1, name, description, image);
	}
	
	public DataInfo(String name, String description, Bitmap image) {
		this(-1, name, description, image);
	}
	
	public DataInfo(String name, String description, Object addData01) {
		this(-1, name, description, -1);
		this.addData01 = addData01;
	}
	
	public DataInfo(int id, String name) {
		this(id, name, "", -1);
	}
	
	public DataInfo(int id, String name, String description, int image) {
		setBasics(id, name, description);
		this.image = image;
	}
	
	public DataInfo(int id, String name, String description, Drawable imageD) {
		setBasics(id, name, description);
		this.imageD = imageD;
	}
	
	public DataInfo(int id, String name, String description, Bitmap imageB) {
		setBasics(id, name, description);
		this.imageB = imageB;
	}
	
	public DataInfo(DataInfo con) {
		this.id = con.id;
		this.name = con.name;
		this.description = con.description;
		this.image = con.image;
		this.imageD = con.imageD;
		this.imageB = con.imageB;
		this.imageRight = con.imageRight;
		this.value01 = con.value01;
		this.value02 = con.value02;
		this.distance = con.distance; 
		this.addData01 = con.addData01;
	}

	private void setBasics(int id, String name, String description) {
		this.id = id;
		this.name = name;
		this.description = description;
		this.image = -1;
		this.imageD = null;
		this.imageB = null;
		this.imageRight = null;
	}

	public void setCoordinates(double lat, double lon) {
		this.value01 = lat;
		this.value02 = lon;
	}
	
	public int getId() {
		return id;
	}
	
	public void setId(int id) {
		this.id = id;
	}
	
	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public String getDescription() {
		return description;
	}
	
	public void setDescription(String description) {
		this.description = description;
	}
	
	public void addDescription(String desc) {
		if (description == null || description.length() == 0)
			description = desc;
		else
			description += ", " + desc;
	}
	
	public int getImage() {
		return image;
	}
	
	public Drawable getImageD() {
		return imageD;
	}
	
	public Bitmap getImageB() {
		return imageB;
	}
	
	public void setImage(int image) {
		this.image = image;
	}
	
	public void setImage(Bitmap imageB) {
		this.imageB = imageB;
	}
	
	public Bitmap getImageRight() {
		return imageRight;
	}
	
	public DataInfo setImageRight(Bitmap image){
		this.imageRight = image;
		return this;
	}
	
	public String toString() {
		return getName();
	}

	public int compareTo(DataInfo another) {
		return name.compareTo(another.getName());
	}

	public Location getLocation() {
		Location loc = new Location(TAG);
		loc.setLatitude(value01);
		loc.setLongitude(value02);
		return loc;
	}

	public DataInfo setAddData01(Object data) {
		this.addData01 = data;
		return this;
	}
	
	public void clearDistAzi() {
		distance = -1;
	}
	
	public boolean isDistAziSet() {
		return distance != -1;
	}
	
	public void setDistAzi(Location refLocation) {
		Location loc = getLocation();
		distance = refLocation.distanceTo(loc);
		azimuth = refLocation.bearingTo(loc);
	}
	
	public void setDistAzi(float dist, float azi) {
		distance = dist;
		azimuth = azi;
	}
}
